/**
 * @file MQTTTopicManager.h
 * @brief MQTT主题管理类头文件
 * 
 * 负责生成和管理MQTT通信所需的各类主题路径
 * 基于设备ID自动生成统一的主题结构
 */

#ifndef MQTTTOPICMANAGER_H
#define MQTTTOPICMANAGER_H

#include <WiFi.h>
#include <ArduinoJson.h>

class MQTTTopicManager {
private:
    String deviceId;    ///< 设备唯一标识符
    String baseTopic;   ///< 基础主题路径

public:
    /**
     * @brief 构造函数，自动生成设备ID和基础主题
     */
    MQTTTopicManager() {
        // 生成设备ID: ESP32_ + MAC地址后6位
        uint64_t chipId = ESP.getEfuseMac();
        uint32_t high = (chipId >> 32) & 0xFFFF;
        uint32_t low = chipId & 0xFFFFFFFF;
        deviceId = "ESP32_" + String(high, HEX) + String(low, HEX);
        deviceId.toUpperCase();
        
        // 构建基础主题路径
        baseTopic = "devices/" + deviceId;
    }

    // 遥测数据主题
    String getTelemetrySensor() { return baseTopic + "/telemetry/sensor"; }   ///< 传感器遥测数据主题
    String getTelemetryNetwork() { return baseTopic + "/telemetry/network"; } ///< 网络状态遥测数据主题

    // 命令主题
    String getCommandRequest() { return baseTopic + "/commands/request"; }    ///< 命令请求主题
    String getCommandResponse() { return baseTopic + "/commands/response"; }  ///< 命令响应主题

    // 配置主题
    String getConfigSet() { return baseTopic + "/configuration/set"; }        ///< 配置设置主题

    // 管理主题
    String getManagementRestart() { return baseTopic + "/management/restart"; } ///< 设备重启管理主题

    // 设备信息获取
    String getDeviceId() { return deviceId; }    ///< 获取设备ID
    String getBaseTopic() { return baseTopic; }  ///< 获取基础主题路径
};

#endif